﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Microsoft.Xna.Framework.Graphics;
using Microsoft.Xna.Framework.Input;
using Microsoft.Xna.Framework;
using Toto.Componentes;

namespace Toto.Estado
{
    public abstract class GameScreen
    {
        #region [ Fields ]

        /// <summary>
        /// Armazena referência do jogo que o chamou
        /// </summary>
        protected Game1 game;

        /// <summary>
        /// Imagem de fundo da tela
        /// </summary>
        protected Texture2D background;

        /// <summary>
        /// Estado do teclado atual
        /// </summary>
        protected KeyboardState keyState = Keyboard.GetState();

        /// <summary>
        /// Estado do teclado anterior
        /// </summary>
        protected KeyboardState oldKeyState = Keyboard.GetState();

        /// <summary>
        /// Referência para o sprite batch do jogo 
        /// </summary>
        protected SpriteBatch spriteBatch;

        #endregion

        #region [ Constructor ]
        /// <summary>
        /// Construtor da da tela
        /// </summary>
        /// <param name="game"></param>
        public GameScreen(Game1 game)
        {
            this.game = game;
            // Recebe o sprite batch do jogo via serviços do XNA
            this.spriteBatch = (SpriteBatch)game.Services.GetService(typeof(SpriteBatch));
            //Carrega Componentes
            Textura.carregaTextura(game);
            GameFont.carregaGameFonts(game);
           // Seta a Formação Padrão
            Formacao.formacaoNumber = 1;
        }

        #endregion

        #region [ Virtual Methods ]

        /// <summary>
        /// Atualiza o a tela
        /// </summary>
        /// <param name="gameTime"></param>
        public virtual void Update(GameTime gameTime)
        {
            // Atualiza o estado do teclado
            oldKeyState = keyState;
            keyState = Keyboard.GetState();
        }

        /// <summary>
        /// Desenha a tela
        /// </summary>
        /// <param name="gameTime"></param>
        public virtual void Draw(GameTime gameTime) { }

        #endregion
    }
}
